package thread.sync2;

public class Shop {
    public void buy() {
        try {
            Thread t = Thread.currentThread();
            System.out.println(t.getName() + ":正在挑选衣服...");
            Thread.sleep(5000);
            /*
                同步块使用时必须在synchronized()中指定同步监视器对象,该对象必须满足两点:
                1:必须是引用类型的实例
                2:多个线程看到的必须是同一个对象
                合适的锁对象除了满足上述两点外,还应当满足该同步时多个线程看到的是同一个对象,不该同步时
                看到的就不是同一个对象.
             */
            synchronized (this) {//给方法块上锁，提高并发效率，有针对性解决并发安全问题
                System.out.println(t.getName() + ":正在试衣服...");
                Thread.sleep(5000);
            }

            System.out.println(t.getName() + ":结账离开");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
